#ifndef AABB_H
#define AABB_H

#include "typedefs.h"
#include "vector3.h"

namespace Math
{
class AABB
{

#ifdef USE_FLOAT
    Eigen::AlignedBox<float,3> v;
#else
    Eigen::AlignedBox<double,3> v;
#endif

public:
    Eigen::AlignedBox<Real,3> getEigen() const  { return v;}

    AABB();

    AABB(const AABB &a) { v = a.v;}

    void setEmpty(void) { v.setEmpty(); }

    void extend(const Vector3 &a) { v.extend(a.getEigen()); }

    void extend(const AABB &a) { v.extend(a.v); }

    Vector3 min() { return v.min(); }
    Vector3 max() { return v.max(); }

    Vector3 getCenter() const { return Vector3(v.center()); }

    bool contains(const Vector3 &a) const { return v.contains(a.getEigen()); }
};
}

#endif // AABB_H
